home *** CD-ROM | disk | FTP | other *** search
- (*===========================================================================*)
- (* Trace/debuger *)
- (* *)
- (* Copyright 1988, 1989, 1991 by H. Roy Engehausen. All rights reserved. *)
- (* *)
- (*===========================================================================*)
-
- UNIT BBTRACE;
-
- INTERFACE
-
- PROCEDURE trace_data( event : STRING; num : LONGINT;
- place : POINTER; data_in : STRING);
-
- IMPLEMENTATION
-
- USES
- DOS,
- bbbug,
- bbdummy,
- bbmisc3,
- bbmisc4;
-
- {$UNDEF DEBUG} (* Controls handle debugging *)
-
- (*===========================================================================*)
- (* Subroutine to calculate number of handles *)
- (*===========================================================================*)
-
- {$IFDEF DEBUG}
-
- VAR
- f_a : ARRAY [1..18] OF TEXT;
-
- FUNCTION n_handles: BYTE;
- VAR
- i : INTEGER;
- f_n : BYTE;
- m_n : BYTE;
-
- BEGIN;
-
- f_n := 0;
-
- {$I-}
-
- REPEAT
-
- f_n := f_n + 1;
-
- ASSIGN(f_a[f_n], 'X.X');
-
- RESET (f_a[f_n]);
-
- i := IORESULT;
-
- UNTIL (i <> 0) OR (f_n = 18);
-
- {$I+}
-
- IF i <> 4 THEN
- BEGIN;
- WRITELN('Unexpected crash -- ', i);
- HALT;
- END;
-
- m_n := f_n - 1;
-
- n_handles := m_n;
-
- f_n := 0;
-
- WHILE f_n < m_n DO
- BEGIN;
- INC(f_n);
- CLOSE(f_a[f_n]);
- END;
-
- END;
-
- {$ENDIF}
-
- (*===========================================================================*)
- (* Main trace routine *)
- (*===========================================================================*)
-
- PROCEDURE trace_data( event : STRING; num : LONGINT;
- place : POINTER; data_in : STRING);
-
- TYPE
- p_f = ^textrec;
-
- VAR
- h : WORD;
- p : p_f;
- tp : POINTER;
-
- BEGIN;
-
- (*-----------------------------------------------------------------------*)
- (* If to tracing then leave *)
- (*-----------------------------------------------------------------------*)
-
- IF NOT opt_block.opt_trace THEN
- EXIT;
-
- (*-----------------------------------------------------------------------*)
- (* Find out who called us *)
- (*-----------------------------------------------------------------------*)
-
- tp := called_by(1);
-
- (*-----------------------------------------------------------------------*)
- (* Write the trace file *)
- (*-----------------------------------------------------------------------*)
-
- WRITELN(trace_file^, a2x(SEG(tp^)), ':', a2x(OFS(tp^)),
- active_tcb^.tcb_number,
- event,
- num:8,
- ' ',
- a2x(SEG(place^)), ':', a2x(OFS(place^)),
- data_in);
-
- (*-----------------------------------------------------------------------*)
- (* Show handle information as needed *)
- (*-----------------------------------------------------------------------*)
-
- {$IFDEF DEBUG}
- IF place <> NIL THEN
- BEGIN;
- p := place;
- h := p^.handle;
- END
- ELSE
- h := 0;
-
- WRITELN(trace_file^, 'Handle = ', h, ' -- Number left = ', n_handles);
- {$ENDIF}
-
- (*-----------------------------------------------------------------------*)
- (* Bumb trace count and close file if needed *)
- (*-----------------------------------------------------------------------*)
-
- IF trace_count < 5 THEN
- INC(trace_count)
- ELSE
- BEGIN;
- trace_count := 0;
- flushdosfile(trace_file);
- END;
-
- END;
-
- END.